package com.edu.d4_collection_test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class GameDemo {
    /**
     * 集合案例：斗地主游戏
     * 54张牌、三个玩家、依次发完51张牌，洗牌，给玩家牌排序、再输出玩家牌
     */
    /**
     * 功能：
     * 1、做牌
     * 2、洗牌
     * 3、定义三个玩家
     * 4、依次发完51张牌
     * 5、给牌排序
     *6、输出玩家牌
     */
    //1、定义一个静态数组用于存储54张牌
    public static List<Card> allCard=new ArrayList<>();
    //2、定义一个静态代码块，做牌
    static {
        //3、定义牌数
        String[] num={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        //4、定义花色
        String[] color={"♥","♠","♣","♦"};
        //组合号码牌和花色
        int index=0;
        //因为上面静态块中已经按大小顺序定义好各元素大小，所以，定义个索引用来取号码牌大小
        for (String s : num) {
            //自3——2之间，每移动一个牌，index就加一
            index++;
            for (String s1 : color) {
                Card card = new Card(s, s1,index);
                allCard.add(card);
            }
        }
        allCard.add(new Card("小王","🃏",++index));
        allCard.add(new Card("大王","🃏",++index));
        System.out.println("新牌："+allCard);
    }

    public static void main(String[] args) {
        //5、洗牌
        Collections.shuffle(allCard);
        System.out.println("洗牌后："+allCard);
        //将54张牌，其中51张发给三个玩家，剩余三张牌做底牌
        //6、定义三个玩家
        List<Card> wanjia01 = new ArrayList<>();
        List<Card> wanjia02 = new ArrayList<>();
        List<Card> wanjia03 = new ArrayList<>();
        //7、将牌发给三个玩家
        for (int i = 0; i < allCard.size() - 3; i++) {
            Card c=allCard.get(i);
            //用一个轮循，三个一循环
            if(i%3==0){
                wanjia01.add(c);
            }else if(i%3==1){
                wanjia02.add(c);
            }else if(i%3==2){
                wanjia03.add(c);
            }
        }
        //8、将三张底牌放到一个集合当中，方便直接把底牌倒给某一玩家
        List<Card> LastCard = allCard.subList(allCard.size()-3,allCard.size());
        System.out.println("底牌："+LastCard);
        //9、给三个玩家的牌进行排序
        paixu(wanjia01);
        paixu(wanjia02);
        paixu(wanjia03);
        paixu(LastCard);
        //10、输出三个玩家的牌和三张底牌
        System.out.println("玩家一的牌："+wanjia01);
        System.out.println("玩家二的牌："+wanjia02);
        System.out.println("玩家三的牌："+wanjia03);
        System.out.println("底牌："+LastCard);
    }
    //给玩家牌排序的方法
    public static void paixu(List<Card> cards){
/*        Collections.sort(cards, new Comparator<Card>() {
            @Override
            public int compare(Card card, Card t1) {
                return card.getIndex()-t1.getIndex()>=0?1:-1;
            }
        });*/
//lambda简化
        Collections.sort(cards, (card,t1)-> card.getIndex()-t1.getIndex()>=0?1:-1);
    }
}
